{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# pip install thulac\n",
    "\n",
    "## 通过 import thulac 来引用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model loaded succeed\n",
      "我_r 爱_v 北京_ns 天安门_ns\n"
     ]
    }
   ],
   "source": [
    "import thulac\n",
    "\n",
    "thu1 = thulac.thulac()  #默认模式\n",
    "text = thu1.cut(\"我爱北京天安门\", text=True)  #进行一句话分词\n",
    "print(text)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model loaded succeed\n",
      "我 爱 北京 天安门\n"
     ]
    }
   ],
   "source": [
    "thu1 = thulac.thulac(seg_only=True)  #只进行分词，不进行词性标注\n",
    "text = thu1.cut(\"我爱北京天安门\", text=True)  #进行一句话分词\n",
    "print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 对input.txt文件内容进行分词，输出到output.txt\n",
    "## thu1.cut_f(\"input.txt\", \"output.txt\")  \n",
    "### 把页面复制到input.txt.\n",
    "### strip： 用来去除头尾字符、空白符\n",
    "### 通过for循环，把段落连成一大段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "file0=open(r'input.txt','r', encoding=\"utf-8\")\n",
    "file0_line=file0.readlines()\n",
    "file0.close()\n",
    "File = \"\"\n",
    "for line in file0_line:\n",
    "    File=File+line.strip()\n",
    "# print(File)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 只进行分词，不进行词性标注\n",
    "## 查看被分词的变量类型\n",
    "## list 类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model loaded succeed\n",
      "<class 'list'>\n"
     ]
    }
   ],
   "source": [
    "thu1 = thulac.thulac(seg_only=True)  #只进行分词，不进行词性标注\n",
    "cut_File=thu1.cut(File)\n",
    "print(type(cut_File))\n",
    "# print(cut_File)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 发现list中，有很多空的元素\n",
    "## 通过for循环把空的元素去除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "tFlist=[]\n",
    "for text in cut_File:\n",
    "    for text2 in text:\n",
    "        if len(text2) > 1 :\n",
    "                tFlist.append(text2.strip())\n",
    "# print(tFlist)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 打开停用词文件，清理停用词"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "sw=open(r'stopwords.txt','r', encoding=\"utf-8\")\n",
    "st=sw.readlines()\n",
    "sw.close()\n",
    "#这里是有一个文件存放要改的文章，一个文件存放停用表，然后和停用表里的词比较，一样的就删掉，最后把结果存放在一个文件中\n",
    "stopwords = {}.fromkeys([ line.rstrip() for line in st ])\n",
    "final = []\n",
    "#Sfinal = \"\"\n",
    "for word in tFlist:\n",
    "    if word not in stopwords:\n",
    "        if (word != \"。\" and word != \"，\") :\n",
    "            #Sfinal = Sfinal + \",\" + word\n",
    "            final.append(word)\n",
    "#print(final)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 去除专业停用词"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 引入正则表达式，去除数字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'list'>\n",
      "['-更新', '..产', 'CAC', 'CGTN', 'DAX', 'ETF', 'HMS', 'ICP证', 'IPO', 'MORE', 'MORE上市', 'MORE名', 'MORE股', 'MORE股市', 'MORE股市', 'MORE股市', 'PSI', 'QDII', 'W底', 'set', '|<<', '一步之遥', '七大', '三万', '三月', '三板', '上半年', '上市', '上市', '上涨', '上证', '下半年', '下半年', '下半年', '下调', '下跌', '下跌', '下降', '世界', '业绩', '业绩', '业绩', '业绩', '中介', '中信', '中国', '中国', '中国', '中国', '中国', '中国', '中国', '中小板', '中报', '中报', '中旗', '中盘', '中签率', '为首', '主权', '主板', '主板', '举报', '举报', '乐漾', '买入', '买入', '争相', '交易', '交易', '产', '产品', '产品', '产品', '产经', '人员', '人员', '人带娃', '人数', '人民军', '人民军', '人间', '今日', '今日', '今日', '今生', '仓股', '付费', '代码', '企业', '企业', '伊朗', '优势', '优选', '会面', '传统', '伦敦', '体制', '保本', '保本型', '保证', '信息', '信息', '信息', '信息网', '信息网', '信息网', '信息网', '修复', '倒数', '债券型', '债券型', '值得', '假冒', '元续', '免责', '入口', '全国', '全国', '公募', '公司', '公司', '公司', '公司', '公司', '公司', '公司', '公司', '公司', '公告', '公告', '公告', '公告', '公告', '公安备', '公布', '公布', '关键', '兼职', '农业', '冬天', '冲击', '冶炼', '净值', '净值', '净值', '净利', '凌晨', '减持', '击沉', '分析', '分析', '分红', '分红', '创业板', '创始人', '利好', '利润', '利润', '利空', '制造业', '刷单', '刷新', '券商', '券商', '券商', '前世', '前景', '加仓', '加仓', '加仓股', '加密', '加拿大', '加权', '北极', '医药', '医药', '医药', '千亿', '升级', '华为', '华为', '华尔街', '华尔街', '华达', '卫生', '印度', '印度', '印度', '印度', '印度', '历史', '历史', '历史', '历史性', '压', '原油', '友情', '双增长', '反弹', '反弹', '反弹', '反目', '发中报', '发售', '发布', '发布', '发行量', '发言人', '叒涨', '可信', '台北', '叹息', '同比', '名单', '名称', '名称', '启动', '周一', '周一', '周三', '呼吁', '哪家', '四日', '回升', '回应', '回报', '困境', '国务院', '国际', '国际', '坍塌', '坦然', '城市', '基础', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '基金', '增兵', '增兵', '增持', '增长', '增长', '备忘', '复盘', '复苏', '外交部', '外交部', '外汇', '外汇', '外汇', '外汇', '外汇', '大全', '大关', '大宗', '大幅', '大戏', '大手笔', '大盘', '大盘', '大米', '大脑', '大选', '大飚腾股', '夫妇', '失前蹄', '失望', '套路', '奥翔', '孟买sens', '孟晚舟', '季度', '季度', '季度', '安心', '定增', '实习', '实力派', '宿业', '密集', '富时', '富时', '封单', '封杀', '封锁', '小心', '尾声', '展开', '屡禁不止', '工业', '工作', '巨亏', '巨头', '市场', '市场', '市场', '市场', '市场', '市场', '市场', '市场型', '布工厂', '师怒', '希望', '希腊', '常规', '平台', '平均', '平盘', '年度', '年度', '年度', '年度', '广告', '库存', '底气', '座矿', '开启', '异动股', '引擎', '引擎', '张忆东', '张忆东', '强势股', '影响', '影响', '影子', '影视', '循环', '德国', '忧心', '快报', '快报', '快讯', '快递', '怂什', '思维', '急切', '急速', '总领馆', '恒瑞', '恒生', '恒生', '情绪', '愈发', '意义', '意味什', '意大利', '成指', '成绩', '成都', '成都', '房产', '房地产业', '手机', '手枪', '手枪', '打算', '扩展', '技巧', '抄底', '抄袭', '抗疫', '抢筹', '报告', '报告', '报头', '披露', '披露', '披露', '持仓', '持仓', '持有', '指挥', '指挥', '指数', '指数', '指数', '指数', '指数', '指数', '指数', '指数', '指数', '换仓', '授予', '授予', '排行', '排行', '排行', '排行', '排行', '探底', '接近', '推荐', '提示', '提示', '提高', '提高', '揭秘', '搜索', '摘要', '摘要', '撤回', '操作', '操控者', '收益', '收益', '收益率', '收益率', '收跌', '攻守兼备', '政府', '敏芯', '散户', '数据', '数据', '数据', '数据', '数据', '斯RTS', '新增', '新材', '新闻', '新闻', '新闻', '新闻', '新高', '方式', '方案', '方案', '方案', '旅游', '无牌机', '日', '日经', '日经', '早饭', '时隔', '明日', '明星', '星期', '晚间', '晚间', '晨会', '普输', '暗藏', '暴增股', '暴涨', '曝光', '曝光', '更新', '更新', '最新', '最新', '最新', '最新', '最新', '最新', '最新', '有望', '有色金属', '有色金属', '服务', '服务', '服务', '服装', '服装', '朝鲜', '朝鲜', '期货', '期货', '期货', '期货', '本周', '机会', '机会', '机会', '机构', '机构', '机构', '机构', '机构', '机构', '权日', '杠杆', '杠杆', '条款', '条款', '标准', '核心', '格局', '案情', '模式', '欧洲', '欺骗', '死亡', '比利时', '水井坊', '水井坊', '水井坊', '水井坊', '水井坊', '水井坊', '水井坊', '水井坊', '汇丰', '汉城', '汉城', '法国', '波段', '泰国', '泰国', '洗盘', '派军', '流出', '浙江', '浙江', '浮出水面', '浮动', '浮动', '海外', '消息', '涨', '涨', '涨', '涨', '涨', '涨停股', '涨跌', '涨跌', '涨跌幅', '深证', '混合型', '混合型', '渔业', '港股', '滚动', '滚动', '演美', '澳洲', '澳洲', '火内', '火锅店', '炒股', '点评', '点金', '热点', '热评', '爆发', '爆发', '版权', '牛市', '特币', '特朗', '状况', '狂欢', '现象', '现货', '现货', '理财', '理财', '理财', '理财', '理财', '理财', '甘薇', '申购', '申购', '电板', '电话', '疫情', '疫情', '疫苗', '疯涨', '登陆', '白宫', '百万', '百亿', '盈', '盘后', '盘点', '盘点四牛', '目标', '盯上', '直播', '直播', '相继', '看好', '看好', '看点', '短期', '短线', '短线', '矿采', '研报', '破发', '磋商', '社保', '社保', '神秘', '私募', '私募', '科技', '科技', '积电', '突发', '突破', '突破', '策略', '策略', '策略', '策略', '类型', '类型', '精选', '精选', '系统', '累怎', '约翰逊', '纪念', '纪念', '纳斯达克', '纽约', '细节', '终端', '经济', '经济', '经济', '经理', '经理', '经营', '绝招', '统计', '统计', '统计', '综合', '综合', '综合', '缘何', '缩量', '缩量', '网独', '美元', '美元', '美元', '美元', '美元', '美元', '美国', '美国', '美国', '美国', '美国', '美国', '美国', '美国', '美领馆', '翘首以待', '翻车', '老板', '老艾', '老鼠仓', '职场', '联合军', '股东', '股东', '股份', '股份', '股份盘', '股市', '股市', '股市', '股牛', '股票', '股票', '股票', '股票型', '股票型', '股量', '背后', '背后', '背后', '背后', '胡锡进', '能力', '能源股', '脱发', '航母', '航空', '英特尔', '药业', '荷兰', '莫迪', '营收', '葡萄牙', '董事长', '蒲尔', '行业', '行业', '行业', '行业', '行情', '行情', '行情', '行情', '补偿', '衰竭', '裁员', '西域', '观点', '规模', '解盘', '记住', '记忆力', '访问', '证券', '证券', '证券', '评级', '评级', '评论区', '诱饵', '调整', '调研', '调研', '谣言', '豪车', '财信', '财报', '财报', '财经', '财经', '财经', '财经', '财经', '财经', '财网', '财网', '财网', '货币', '货币', '货币型', '资金', '资金', '资金', '赚钱', '赚钱', '赚钱', '越南', '趋势', '辞职', '边境', '运输业', '违法', '追踪', '退出', '逆势', '逆势', '选业', '透露', '速递', '速递', '道琼斯', '郑恺', '鄂B', '金正恩', '金正恩', '金股', '银行', '银行', '银行', '银行', '银行', '银行', '链接', '防雷', '阳光', '附股', '陷入', '隐私', '隐藏', '集体', '雇员', '震荡', '霸权', '霸王', '非保本', '顾问', '预期', '预期', '预期', '领先', '餐饮业', '首日', '骗局', '高位', '高接', '高测', '高点', '高盛', '高管', '高管', '高级', '高级', '高送', '高额', '鸡蛋', '鸿蒙', '麻烦', '黄金', '黄金', '黄金', '黄金', '黄金', '黄金', '黄金站', '黑马', '龙虎榜', '龙虎榜']\n"
     ]
    }
   ],
   "source": [
    "import re\n",
    "\n",
    "final2=[]\n",
    "for s in final:\n",
    "    se =re.findall(r'([0-9])',s)\n",
    "    if se == []:\n",
    "        final2.append(s)\n",
    "print(type(final2))\n",
    "# print(final2)\n",
    "final2.sort()\n",
    "print(final2)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 引入 pandas 进行分组统计，打印前十名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>word</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>基金</th>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>指数</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>公司</th>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>美国</th>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>水井坊</th>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>市场</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>中国</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>最新</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>银行</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>财经</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      cnt\n",
       "word     \n",
       "基金     26\n",
       "指数      9\n",
       "公司      9\n",
       "美国      8\n",
       "水井坊     8\n",
       "市场      7\n",
       "中国      7\n",
       "最新      7\n",
       "银行      6\n",
       "财经      6"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "corpus = pd.DataFrame(final2, columns=['word'])\n",
    "corpus['cnt'] = 1\n",
    "# 分组统计\n",
    "g = corpus.groupby(['word']).agg({'cnt': 'count'}).sort_values('cnt', ascending=False)\n",
    "\n",
    "\n",
    "print(type(g))\n",
    "g.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 制作词云图（https://github.com/amueller/word_cloud）\n",
    "## 把list 转成 带“，”逗号的str文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'str'>\n"
     ]
    }
   ],
   "source": [
    "Ssfinal = \"\"\n",
    "for w1 in final2:\n",
    "    Ssfinal = Ssfinal + \", \" + w1\n",
    "print(type(Ssfinal))\n",
    "# print(Ssfinal)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 生成词云图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from wordcloud import WordCloud\n",
    "\n",
    "# 生成词云图，这里需要注意的是WordCloud默认不支持中文，所以这里需已下载好的中文字库\n",
    "# 无自定义背景图：需要指定生成词云图的像素大小，默认背景颜色为黑色,统一文字颜色：mode='RGBA'和colormap='pink'\n",
    "wc = WordCloud(\n",
    "        # 设置字体，不指定就会出现乱码\n",
    "        font_path=r'simsun.ttc',  \n",
    "        # 设置背景色\n",
    "        background_color='white',\n",
    "        collocations=False,\n",
    "        # 设置背景宽\n",
    "        width=1080,\n",
    "        # 设置背景高\n",
    "        height=720,\n",
    "        # 最大字体\n",
    "        max_font_size=300,\n",
    "        # 最小字体\n",
    "        min_font_size=10,\n",
    "        mode='RGBA'\n",
    "        #colormap='pink'\n",
    "        )\n",
    "# 产生词云\n",
    "wc.generate(Ssfinal)\n",
    "# 保存图片\n",
    "wc.to_file(r\"wordcloud.png\") # 按照设置的像素宽高度保存绘制好的词云图，比下面程序显示更清晰\n",
    "# 4.显示图片\n",
    "# 指定所绘图名称\n",
    "plt.figure(\"jay\")\n",
    "# 以图片的形式显示词云\n",
    "plt.imshow(wc)\n",
    "# 关闭图像坐标系\n",
    "plt.axis(\"off\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# stylecloud"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from stylecloud import gen_stylecloud"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 读取文件制作词云，如果是中文，需要设置字体\n",
    "#gen_stylecloud(file_path=\"stylecloud.txt\", collocations=False, font_path=\"simsun.ttc\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "gen_stylecloud(Ssfinal, collocations=False, font_path=\"simsun.ttc\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "import jieba   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
